home *** CD-ROM | disk | FTP | other *** search
- #
- # A dinner table scene, to demonstrate the surface constructors of the IRIT
- # solid modeller. Do not attempt to run this model on an IBM PC...
- #
- # Gershon Elber, June 1991
- #
- # modification to dinner.ray:
- # fov 12
- # light 1 1 1 point 10 30 10
-
- if ( machine == msdos, resolution = 5, resolution = 10 );
-
- #
- # Control points for animation
- #
- Pt1 = CTLPT(E2,-0.6,-0.6); Pt2 = CTLPT(E2, 16.2,16.2);
- Pt3 = CTLPT(E2,-1.2,-1.2); Pt4 = CTLPT(E2, 15.6,15.6);
- Pt5 = CTLPT(E2,-1.8,-1.8); Pt6 = CTLPT(E2, 15.0,15.0);
- Pt7 = CTLPT(E2,-2.4,-2.4); Pt8 = CTLPT(E2, 14.4,14.4);
- Pt9 = CTLPT(E2,-3.0,-3.0); Pt10 = CTLPT(E2, 13.8,13.8);
- Pt11 = CTLPT(E2,-3.6,-3.6); Pt12 = CTLPT(E2, 13.2,13.2);
- Pt13 = CTLPT(E2,-4.2,-4.2); Pt14 = CTLPT(E2, 12.6,12.6);
- Pt15 = CTLPT(E2,-4.8,-4.8); Pt16 = CTLPT(E2, 12.0,12.0);
- Pt17 = CTLPT(E2,-5.4,-5.4); Pt18 = CTLPT(E2, 11.4,11.4);
- Pt19 = CTLPT(E2,-6.0,-6.0); Pt20 = CTLPT(E2, 10.8,10.8);
- Pt21 = CTLPT(E2,-6.6,-6.6); Pt22 = CTLPT(E2, 10.2,10.2);
- Pt23 = CTLPT(E2,-7.2,-7.2); Pt24 = CTLPT(E2, 9.6,9.6);
- Pt25 = CTLPT(E2,-7.8,-7.8); Pt26 = CTLPT(E2, 9.0,9.0);
- Pt27 = CTLPT(E2,-8.4,-8.4); Pt28 = CTLPT(E2, 8.4,8.4);
- Pt29 = CTLPT(E2,-9.0,-9.0); Pt30 = CTLPT(E2, 7.8,7.8);
- Pt31 = CTLPT(E2,-9.6,-9.6); Pt32 = CTLPT(E2, 7.2,7.2);
- Pt33 = CTLPT(E2,-10.2,-10.2); Pt34 = CTLPT(E2, 6.6,6.6);
- Pt35 = CTLPT(E2,-10.8,-10.8); Pt36 = CTLPT(E2, 6.0,6.0);
- Pt37 = CTLPT(E2,-11.4,-11.4); Pt38 = CTLPT(E2, 5.4,5.4);
- Pt39 = CTLPT(E2,-12.0,-12.0); Pt40 = CTLPT(E2, 4.8,4.8);
- Pt41 = CTLPT(E2,-12.6,-12.6); Pt42 = CTLPT(E2, 4.2,4.2);
- Pt43 = CTLPT(E2,-13.2,-13.2); Pt44 = CTLPT(E2, 3.6,3.6);
- Pt45 = CTLPT(E2,-13.8,-13.8); Pt46 = CTLPT(E2, 3.0,3.0);
- Pt47 = CTLPT(E2,-14.4,-14.4); Pt48 = CTLPT(E2, 2.4,2.4);
- Pt49 = CTLPT(E2,-15.0,-15.0); Pt50 = CTLPT(E2, 1.8,1.8);
- Pt51 = CTLPT(E2,-15.6,-15.6); Pt52 = CTLPT(E2, 1.2,1.2);
- Pt53 = CTLPT(E2,-16.2,-16.2); Pt54 = CTLPT(E2,0.6,0.6);
-
- #
- # First model the floor...
- #
- v1 = vector( -4.0, -4.0, 0.0 );
- v2 = vector( 4.0, -4.0, 0.0 );
- v3 = vector( 4.0, 4.0, 0.0 );
- v4 = vector( -4.0, 4.0, 0.0 );
- base = poly( list( v1, v2, v3, v4 ), false );
- color( base, white );
- attrib( base, "texture", "marble" );
- attrib( base, "reflect", "0.6" );
- attrib( base, "rgb", "100,0,0" );
-
- #
- # Model the table:
- #
-
- cross = ctlpt( E3, 0.0001, 0.0, 1.0 ) +
- ctlpt( E3, 1.0, 0.0, 1.0 ) +
- ctlpt( E3, 1.0, 0.0, 0.95 ) +
- cbspline( 3,
- list( ctlpt( E3, 0.1, 0.0, 0.95 ),
- ctlpt( E3, 0.1, 0.0, 0.9 ),
- ctlpt( E3, 0.1, 0.0, 0.7 ),
- ctlpt( E3, 0.2, 0.0, 0.6 ),
- ctlpt( E3, 0.2, 0.0, 0.2 ),
- ctlpt( E3, 0.4, 0.0, 0.05 ),
- ctlpt( E3, 0.4, 0.0, 0.0 ) ),
- list( KV_OPEN ) ) +
- ctlpt( E3, 0.0001, 0.0, 0.0 );
- table = surfrev( cross );
- color( table, yellow );
- attrib( table, "resolution", 2 );
- attrib( table, "texture", "wood" );
- attrib( table, "reflect","0.6" );
- attrib( table, "rgb", "244,164,96" );
- VISIBLE = CBEZIER( list(Pt1,Pt2));
- VISIBLE = CREPARAM(VISIBLE, 0.0, 16.8);
- attrib( table, "animation", list(VISIBLE));
- free(VISIBLE);
-
- #
- # Make the two chairs.
- #
- base1 = sweepsrf( circle( vector( 0.0, 0.0, 0.0 ), 0.02 ),
- cbspline( 3,
- list( ctlpt( E3, 0.5, 0.2, 0.5 ),
- ctlpt( E3, 0.5, 0.2, 0.07 ),
- ctlpt( E3, 0.5, 0.2, 0.015 ),
- ctlpt( E3, 0.43, 0.2, 0.015 ),
- ctlpt( E3, 0.25, 0.2, 0.1 ),
- ctlpt( E3, 0.07, 0.2, 0.015 ),
- ctlpt( E3, 0.0, 0.2, 0.015 ),
- ctlpt( E3, 0.0, 0.2, 0.07 ),
- ctlpt( E3, 0.0, 0.2, 0.5 ) ),
- list( KV_OPEN ) ),
- off );
- color( base1, white );
- attrib( base1, "reflect", 0.9 );
- base2 = base1 * trans( vector( 0.0, -0.4, 0.0 ) );
-
- swpcrv = cbspline( 3,
- list( ctlpt( E3, 0.6, 0.0, 0.5 ),
- ctlpt( E3, 0.3, 0.0, 0.6 ),
- ctlpt( E3, 0.0, 0.0, 0.5 ),
- ctlpt( E3, -0.1, 0.0, 0.5 ),
- ctlpt( E3, -0.1, 0.0, 0.6 ),
- ctlpt( E3, 0.0, 0.0, 0.9 ),
- ctlpt( E3, -0.1, 0.0, 1.2 ) ),
- list( KV_OPEN ) );
- swpcrv = crefine( swpcrv, false, list( 0.01, 0.1, 0.2, 0.3, 4.7, 4.8, 4.9, 4.99 ) );
-
- cross = arc( vector( 0.25, 0.05, 0.0 ),
- vector( 0.25, 0.0, 0.0 ),
- vector( 0.3, 0.0, 0.0 ) ) +
- arc( vector( 0.3, 0.0, 0.0 ),
- vector( 0.25, 0.0, 0.0 ),
- vector( 0.25, -0.05, 0.0 ) ) +
- arc( vector( -0.25, -0.05, 0.0 ),
- vector( -0.25, 0.0, 0.0 ),
- vector( -0.3, 0.0, 0.0 ) ) +
- arc( vector( -0.3, 0.0, 0.0 ),
- vector( -0.25, 0.0, 0.0 ),
- vector( -0.25, 0.05, 0.0 ) ) +
- ctlpt( E3, 0.25, 0.05, 0.0 );
-
- coverMain = sweepsrf( cross * rotz( 90 ), swpcrv, off );
- color( coverMain, yellow );
- attrib( coverMain, "texture", "wood" );
- attrib( coverMain, "rgb", "244,164,96" );
-
- c1 = cmesh(coverMain, ROW, 14);
- c2 = c1 * trans( vector( -0.018, 0.0, 0.06 ) );
- c3 = c2 * scale( vector( 0.0, 0.83, 0.0 ) ) *
- trans( vector( -0.124, 0.0, 1.26 ) );
- coverTop = sFromCrvs( list( c1, c2, c3 ), 3 );
- color( coverTop, yellow );
- attrib( coverTop, "texture", "wood" );
- attrib( coverTop, "rgb", "244,164,96" );
-
- c1 = cmesh(coverMain, ROW, 0);
- c2 = c1 * trans( vector( 0.06, 0.0, -0.02 ) );
- c3 = c2 * scale( vector( 0.0, 0.83, 0.0 ) ) *
- trans( vector( 0.66, 0.0, 0.48 ) );
- coverBot = sFromCrvs( list( c1, c2, c3 ), 3 );
- color( coverBot, yellow );
- attrib( coverBot, "texture", "wood" );
- attrib( coverBot, "rgb", "244,164,96" );
-
- cover = list( CoverMain, coverBot, CoverTop );
-
- chair = list( cover, base1, base2 );
- chair1 = chair * trans( vector( -1.2, 0.0, 0.0 ) );
- chair2 = chair1 * rotz( 90 );
- chair3 = chair1 * rotz( 180 );
- chair4 = chair1 * rotz( 270 );
- VISIBLE = CBEZIER( list(Pt3,Pt4));
- VISIBLE = CREPARAM(VISIBLE, 0.0, 16.8);
- attrib( chair1, "animation", list(VISIBLE));
- free(VISIBLE);
- VISIBLE = CBEZIER( list(Pt5,Pt6));
- VISIBLE = CREPARAM(VISIBLE, 0.0, 16.8);
- attrib( chair2, "animation", list(VISIBLE));
- free(VISIBLE);
- VISIBLE = CBEZIER( list(Pt7,Pt8));
- VISIBLE = CREPARAM(VISIBLE, 0.0, 16.8);
- attrib( chair3, "animation", list(VISIBLE));
- free(VISIBLE);
- VISIBLE = CBEZIER( list(Pt9,Pt10));
- VISIBLE = CREPARAM(VISIBLE, 0.0, 16.8);
- attrib( chair4, "animation", list(VISIBLE));
- free(VISIBLE);
-
- chairs = list( chair1, chair2, chair3, chair4 );
-
- #
- # Create some dishes/cups.
- #
-
- # Four Dishes.
- cross = cbspline( 3,
- list( ctlpt( E3, 0.0001, 0.0, 0.003 ),
- ctlpt( E3, 0.1, 0.0, 0.003 ),
- ctlpt( E3, 0.12, 0.0, 0.0 ),
- ctlpt( E3, 0.15, 0.0, 0.03 ),
- ctlpt( E3, 0.15, 0.0, 0.04 ),
- ctlpt( E3, 0.14, 0.0, 0.03 ),
- ctlpt( E3, 0.12, 0.0, 0.013 ),
- ctlpt( E3, 0.1, 0.0, 0.01 ),
- ctlpt( E3, 0.0001, 0.0, 0.01 ) ),
- list( KV_OPEN ) );
- dish = surfrev( cross );
- color( dish, white );
- attrib( dish, "reflect", "0.2" );
- dish1 = dish * trans( vector( 0.75, 0.0, 1.0 ) );
- dish2 = dish * trans( vector( -0.75, 0.0, 1.0 ) );
- dish3 = dish * trans( vector( 0.0, 0.75, 1.0 ) );
- dish4 = dish * trans( vector( 0.0, -0.75, 1.0 ) );
- VISIBLE = CBEZIER( list(Pt11,Pt12));
- VISIBLE = CREPARAM(VISIBLE, 0.0, 16.8);
- attrib( dish1, "animation", list(VISIBLE));
- free(VISIBLE);
- VISIBLE = CBEZIER( list(Pt13,Pt14));
- VISIBLE = CREPARAM(VISIBLE, 0.0, 16.8);
- attrib( dish2, "animation", list(VISIBLE));
- free(VISIBLE);
- VISIBLE = CBEZIER( list(Pt15,Pt16));
- VISIBLE = CREPARAM(VISIBLE, 0.0, 16.8);
- attrib( dish3, "animation", list(VISIBLE));
- free(VISIBLE);
- VISIBLE = CBEZIER( list(Pt17,Pt18));
- VISIBLE = CREPARAM(VISIBLE, 0.0, 16.8);
- attrib( dish4, "animation", list(VISIBLE));
- free(VISIBLE);
-
- dishes = list( dish1, dish2, dish3, dish4 );
-
- # Wine glasses.
- cross = cbspline( 3,
- list( ctlpt( E3, 0.0001, 0.0, 0.002 ),
- ctlpt( E3, 0.02, 0.0, 0.002 ),
- ctlpt( E3, 0.022, 0.0, 0.0 ),
- ctlpt( E3, 0.022, 0.0, 0.003 ),
- ctlpt( E3, 0.003, 0.0, 0.003 ),
- ctlpt( E3, 0.003, 0.0, 0.007 ),
- ctlpt( E3, 0.004, 0.0, 0.03 ),
- ctlpt( E3, 0.03, 0.0, 0.03 ),
- ctlpt( E3, 0.04, 0.0, 0.04 ),
- ctlpt( E3, 0.03, 0.0, 0.07 ),
- ctlpt( E3, 0.028, 0.0, 0.07 ),
- ctlpt( E3, 0.037, 0.0, 0.042 ),
- ctlpt( E3, 0.031, 0.0, 0.032 ),
- ctlpt( E3, 0.0001, 0.0, 0.032 ) ),
- list( KV_OPEN ) );
- wglass = surfrev( cross * scale( vector( 1.6, 1.6, 1.6 ) ) );
- color( wglass, white );
- attrib( wglass, "reflect", "0.2" );
- attrib( wglass, "transp", "0.95" );
- attrib( wglass, "index", "1.4" );
- wglass1 = wglass * trans( vector( 0.75, 0.2, 1.0 ) );
- wglass2 = wglass * trans( vector( -0.75, -0.2, 1.0 ) );
- wglass3 = wglass * trans( vector( -0.2, 0.75, 1.0 ) );
- wglass4 = wglass * trans( vector( 0.2, -0.75, 1.0 ) );
- VISIBLE = CBEZIER( list(Pt19,Pt20));
- VISIBLE = CREPARAM(VISIBLE, 0.0, 16.8);
- attrib( wglass1, "animation", list(VISIBLE));
- free(VISIBLE);
- VISIBLE = CBEZIER( list(Pt21,Pt22));
- VISIBLE = CREPARAM(VISIBLE, 0.0, 16.8);
- attrib( wglass2, "animation", list(VISIBLE));
- free(VISIBLE);
- VISIBLE = CBEZIER( list(Pt23,Pt24));
- VISIBLE = CREPARAM(VISIBLE, 0.0, 16.8);
- attrib( wglass3, "animation", list(VISIBLE));
- free(VISIBLE);
- VISIBLE = CBEZIER( list(Pt25,Pt26));
- VISIBLE = CREPARAM(VISIBLE, 0.0, 16.8);
- attrib( wglass4, "animation", list(VISIBLE));
- free(VISIBLE);
-
- wglasses = list( wglass1, wglass2, wglass3, wglass4 );
-
- # Regular glasses.
- cross = cbspline( 3,
- list( ctlpt( E3, 0.0001, 0.0, 0.0 ),
- ctlpt( E3, 0.02, 0.0, 0.0 ),
- ctlpt( E3, 0.022, 0.0, 0.001 ),
- ctlpt( E3, 0.022, 0.0, 0.003 ),
- ctlpt( E3, 0.03, 0.0, 0.07 ),
- ctlpt( E3, 0.03, 0.0, 0.072 ),
- ctlpt( E3, 0.028, 0.0, 0.072 ),
- ctlpt( E3, 0.028, 0.0, 0.07 ),
- ctlpt( E3, 0.02, 0.0, 0.005 ),
- ctlpt( E3, 0.018, 0.0, 0.005 ),
- ctlpt( E3, 0.0001, 0.0, 0.005 ) ),
- list( KV_OPEN ) );
- glass = surfrev( cross * scale( vector( 1.6, 1.6, 1.6 ) ) );
- color( glass, white );
- attrib( glass, "reflect", "0.2" );
- attrib( glass, "transp", "0.95" );
- attrib( glass, "index", "1.4" );
- glass1 = glass * trans( vector( 0.75, -0.2, 1.0 ) );
- glass2 = glass * trans( vector( -0.75, 0.2, 1.0 ) );
- glass3 = glass * trans( vector( 0.2, 0.75, 1.0 ) );
- glass4 = glass * trans( vector( -0.2, -0.75, 1.0 ) );
- VISIBLE = CBEZIER( list(Pt27,Pt28));
- VISIBLE = CREPARAM(VISIBLE, 0.0, 16.8);
- attrib( glass1, "animation", list(VISIBLE));
- free(VISIBLE);
- VISIBLE = CBEZIER( list(Pt29,Pt30));
- VISIBLE = CREPARAM(VISIBLE, 0.0, 16.8);
- attrib( glass2, "animation", list(VISIBLE));
- free(VISIBLE);
- VISIBLE = CBEZIER( list(Pt31,Pt32));
- VISIBLE = CREPARAM(VISIBLE, 0.0, 16.8);
- attrib( glass3, "animation", list(VISIBLE));
- free(VISIBLE);
- VISIBLE = CBEZIER( list(Pt33,Pt34));
- VISIBLE = CREPARAM(VISIBLE, 0.0, 16.8);
- attrib( glass4, "animation", list(VISIBLE));
- free(VISIBLE);
-
- glasses = list( glass1, glass2, glass3, glass4 );
-
- # Napkins.
- cross = cbspline( 3,
- list( ctlpt( E2, -0.018, 0.001 ),
- ctlpt( E2, 0.018, 0.001 ),
- ctlpt( E2, 0.019, 0.002 ),
- ctlpt( E2, 0.018, 0.004 ),
- ctlpt( E2, -0.018, 0.004 ),
- ctlpt( E2, -0.019, 0.001 ) ),
- list( KV_OPEN ) );
- cross = cross + -cross * scale( vector( 1, -1, 1 ) );
-
- napkin = extrude( cross * scale( vector( 1.6, 1.6, 1.6 ) ),
- vector( 0.02, 0.03, 0.2 ) );
- color( napkin, red );
- napkin1 = napkin * trans( vector( 0.75, -0.2, 1.0 ) );
- napkin2 = napkin1 * rotz( 90 );
- napkin3 = napkin1 * rotz( 180 );
- napkin4 = napkin1 * rotz( 270 );
- VISIBLE = CBEZIER( list(Pt35,Pt36));
- VISIBLE = CREPARAM(VISIBLE, 0.0, 16.8);
- attrib( napkin1, "animation", list(VISIBLE));
- free(VISIBLE);
- VISIBLE = CBEZIER( list(Pt37,Pt38));
- VISIBLE = CREPARAM(VISIBLE, 0.0, 16.8);
- attrib( napkin2, "animation", list(VISIBLE));
- free(VISIBLE);
- VISIBLE = CBEZIER( list(Pt39,Pt40));
- VISIBLE = CREPARAM(VISIBLE, 0.0, 16.8);
- attrib( napkin3, "animation", list(VISIBLE));
- free(VISIBLE);
- VISIBLE = CBEZIER( list(Pt41,Pt42));
- VISIBLE = CREPARAM(VISIBLE, 0.0, 16.8);
- attrib( napkin4, "animation", list(VISIBLE));
- free(VISIBLE);
-
- napkins = list( napkin1, napkin2, napkin3, napkin4 );
-
- # Big dish.
- cross = ctlpt( E3, 0.0001, 0.0, 0.003 ) +
- cbspline( 3,
- list( ctlpt( E3, 0.15, 0.0, 0.003 ),
- ctlpt( E3, 0.1, 0.0, 0.01 ),
- ctlpt( E3, 0.1, 0.0, 0.035 ),
- ctlpt( E3, 0.2, 0.0, 0.15 ),
- ctlpt( E3, 0.195, 0.0, 0.15 ),
- ctlpt( E3, 0.09, 0.0, 0.03 ),
- ctlpt( E3, 0.04, 0.0, 0.01 ),
- ctlpt( E3, 0.0001, 0.0, 0.01 ) ),
- list( KV_OPEN ) );
- bigdish = surfrev( cross * scale( vector( 1.2, 1.2, 1.2 ) ) );
- bigdish = bigdish * trans( vector( 0.0, -0.2, 1.0 ) );
- color( bigdish, white );
- attrib( bigdish, "reflect", "0.2" );
- attrib( bigdish, "transp", "0.95" );
- attrib( bigdish, "index", "1.4" );
- VISIBLE = CBEZIER( list(Pt43,Pt44));
- VISIBLE = CREPARAM(VISIBLE, 0.0, 16.8);
- attrib( bigdish, "animation", list(VISIBLE));
- free(VISIBLE);
-
- alldishes = list( dishes, wglasses, glasses, napkins, bigdish );
-
- #
- # Create some candles staff.
- #
- cross = cbspline( 3,
- list( ctlpt( E3, 0.0001, 0.0, 0.0 ),
- ctlpt( E3, 0.03, 0.0, 0.0 ),
- ctlpt( E3, 0.035, 0.0, -0.001 ),
- ctlpt( E3, 0.02, 0.0, 0.011 ),
- ctlpt( E3, 0.015, 0.0, 0.011 ),
- ctlpt( E3, 0.014, 0.0, 0.012 ),
- ctlpt( E3, 0.014, 0.0, 0.02 ),
- ctlpt( E3, 0.02, 0.0, 0.03 ) ),
- list( KV_OPEN ) ) +
- ctlpt( E3, 0.012, 0.0, 0.03 ) +
- ctlpt( E3, 0.012, 0.0, 0.015 ) +
- ctlpt( E3, 0.0001, 0.0, 0.015 );
-
- cndlbase = surfrev( cross * scale( vector( 2, 2, 2 ) ) );
- color( cndlbase, white );
- attrib( cndlbase, "reflect", "0.2" );
- attrib( cndlbase, "transp", "0.95" );
- cndlbase1 = cndlbase * trans( vector( 0.2, 0.3, 1.0 ) );
- cndlbase2 = cndlbase * trans( vector( -0.2, 0.3, 1.0 ) );
- VISIBLE = CBEZIER( list(Pt45,Pt46));
- VISIBLE = CREPARAM(VISIBLE, 0.0, 16.8);
- attrib( cndlbase1, "animation", list(VISIBLE));
- free(VISIBLE);
- VISIBLE = CBEZIER( list(Pt47,Pt48));
- VISIBLE = CREPARAM(VISIBLE, 0.0, 16.8);
- attrib( cndlbase2, "animation", list(VISIBLE));
- free(VISIBLE);
-
- cross = ctlpt( E3, 0.0001, 0.0, 0.015 ) +
- cbspline( 3,
- list( ctlpt( E3, 0.011, 0.0, 0.015 ),
- ctlpt( E3, 0.011, 0.0, 0.2 ),
- ctlpt( E3, 0.003, 0.0, 0.3 ) ),
- list( KV_OPEN ) );
- candle = surfrev( cross * scale( vector( 2, 2, 2 ) ) );
- color( candle, red );
- candle1 = candle * trans( vector( 0.2, 0.3, 1.0 ) );
- candle2 = candle * trans( vector( -0.2, 0.3, 1.0 ) );
- VISIBLE = CBEZIER( list(Pt49,Pt50));
- VISIBLE = CREPARAM(VISIBLE, 0.0, 16.8);
- attrib( candle1, "animation", list(VISIBLE));
- free(VISIBLE);
- VISIBLE = CBEZIER( list(Pt51,Pt52));
- VISIBLE = CREPARAM(VISIBLE, 0.0, 16.8);
- attrib( candle2, "animation", list(VISIBLE));
- free(VISIBLE);
-
- candles = list( cndlbase1, cndlbase2, candle1, candle2 );
-
- #
- # View it all and dump it.
- #
- #
- # Go to single buffer since this one is slow.
- #
- viewstate("DblBuffer");
-
- save_mat = view_mat;
- view_mat = view_mat * scale( vector( 0.5, 0.5, 0.5 ) );
- dinner = list( base, table, chairs, alldishes, candles );
-
- save( "dinner", dinner );
-
- view_mat = save_mat;
- #view( list( view_mat ), on );
-
-
-
-
-
-